// 当前所在包
package com.example.pagesliderdemo.slice;
// 模块引入
import com.example.pagesliderdemo.ResourceTable;
import ohos.agp.components.*;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextAlignment;
import ohos.app.Context;
import java.util.List;
// 数据源类
public class PageSliderDataProvider extends PageSliderProvider {
    // 数据模型列表
    private List<ItemModel> dataList;
    // 上下文对象
    private Context context;
    // 构造方法
    public PageSliderDataProvider(List<ItemModel> dataList, Context context) {
        this.dataList = dataList;
        this.context = context;
    }
    // 子类覆写此方法用来返回子页面数
    @Override
    public int getCount() {
        return dataList.size();
    }
    // 子类覆写此方法用来设置具体子页面的内容，这里使用纯代码来构建
    @Override
    public Object createPageInContainer(ComponentContainer componentContainer, int i) {
        // 获取要渲染的数据模型
        ItemModel itemModel = dataList.get(i);
        // 创建Text组件
        Text label = new Text(null);
        // 设置对齐方式
        label.setTextAlignment(TextAlignment.CENTER);
        // 进行布局配置
        label.setLayoutConfig(
            new StackLayout.LayoutConfig(
                ComponentContainer.LayoutConfig.MATCH_PARENT,
                ComponentContainer.LayoutConfig.MATCH_PARENT)
        );
        // 设置文案
        label.setText(itemModel.content);
        // 设置文本颜色
        label.setTextColor(Color.BLACK);
        // 设置字号
        label.setTextSize(50);
        // 设置外边距
        label.setMarginsLeftAndRight(24, 24);
        label.setMarginsTopAndBottom(24, 24);
        // 设置背景
        ShapeElement element = new ShapeElement(context, ResourceTable.Graphic_background_ability_main);
        label.setBackground(element);
        // 将Text添加到布局容器中
        componentContainer.addComponent(label);
        // 返回此Text组件
        return label;
    }

    // 此方法当子页面被销毁时调用，用来清理资源
    @Override
    public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
        componentContainer.removeComponent((Component) o);
    }

    // 此方法当内容组件关联到容器时调用
    @Override
    public boolean isPageMatchToObject(Component component, Object o) {
        return true;
    }
}
